#ifndef __MY_TASK_H_
#define __MY_TASK_H_

#include "main.h"

extern volatile uint32_t realTicks;

extern uint16_t adc_redstone;
extern uint16_t adc_vref; // 内部参考电压
extern uint16_t adc_temp; // 内部温度传感器
extern uint16_t real_Vref; // 实际内部参考电压，毫伏

typedef struct{
    uint8_t run; // 创建时赋值为 1 将立即执行
    uint32_t event;
    uint32_t delayTicks;
    uint32_t tickCounts; // tickCounts 会在每个 tick 减一，当减为 0 时，会赋值为 tickReload，并且调用任务回调函数；赋值为 0 将被挂起 50 天
    uint32_t tickReload; // 重载值/周期，不可赋值为 0，只有任务控制块数组的最后一个元素为 0，表示任务控制块数组的结尾

    uint8_t *flag; // 标志位非 0时，该任务将被立即调用

    void (*pTaskFunc)(void *param); // 任务回调函数指针
}taskCtrl;

void tick_tack(void);
void task_schedule(void);
void start_schedule(void);
void stop_schedule(void);

void task_self_delay(taskCtrl *task, uint32_t delayTicks);
void task_self_pending(taskCtrl *task);

#endif
